/*
******************************************************************************************************* 
**  Copyright (C) 2019, 苏州检易生物科技有限公司 
**  All rights reserved. 
** 
**  FileName:       	uart.h
**  Description:	
**  Author:        	 
**  Version				v0.1
**  Date:           	2019-05-22
**	Function List： 
**  History:         
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*                                              	防止重复包含
*********************************************************************************************************
*/

#ifndef _UART_H_
#define _UART_H_
/*
*********************************************************************************************************
*                                              	调试开关
*********************************************************************************************************
*/


#ifdef __cplusplus
extern "C" {
#endif

/*
*********************************************************************************************************
*                                              	头文件
*********************************************************************************************************
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "stm32h7xx.h"
#include "stm32h7xx_hal.h"
#include "bsp_conf.h"
#ifdef RTOS
#include <rtthread.h>
#include <rthw.h>
#endif
/*
*********************************************************************************************************
*                                              	宏定义
*********************************************************************************************************
*/
//#define BSP_DMA_LEFT(__DMA_HANDLE__) ((DMA_Stream_TypeDef *)(__DMA_HANDLE__.Instance))->NDTR;

/*
*********************************************************************************************************
*                                              枚举和结构体类型定义
*********************************************************************************************************
*/
typedef void (*uart_callback)(void* arg,uint8_t *,uint16_t);

typedef struct BSP_UART{
	UART_HandleTypeDef hal_uart_handler;
	
	DMA_HandleTypeDef hal_tx_dma_handler;
	DMA_HandleTypeDef hal_rx_dma_handler;
	
	uint32_t	baudrate;
	uint8_t * txbuff;
	uint8_t * rxbuff;
	
	uint16_t txsize;
	uint16_t rxsize;
	
	void (*uart_idle_callback)(void* arg ,uint8_t *rxbuff,uint16_t rxsize);
	void (*uart_tc_callback)(void* arg,uint8_t *txbuff,uint16_t txsize);
	
	void* arg;
}bsp_uart_t;
 
/*
*********************************************************************************************************
*                                              	全局变量声明
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                              	函数声明
*********************************************************************************************************
*/
bsp_uart_t* bsp_uart_init(USART_TypeDef* uart,uint32_t baudrate);

void bsp_uart_rx_dma_init(bsp_uart_t*,uart_callback,uint8_t* rxbuff,uint16_t maxsize);
void bsp_uart_tx_dma_init(bsp_uart_t*,uart_callback);

void bsp_uart_dma_transfer(bsp_uart_t*,uint8_t* txbuff,uint16_t txsize);
void bsp_uart_transfer(bsp_uart_t*,uint8_t* txbuff,uint16_t txsize);
void bsp_uart_reveive(bsp_uart_t*,uint32_t size,uint32_t timeout);
void bsp_uart_reveive_byte(bsp_uart_t*,uint8_t* byte,uint32_t timeout);

void bsp_uart_txen(bsp_uart_t*);
void bsp_uart_rxen(bsp_uart_t*);
void bsp_uart_wait_tx_dma_cplt(bsp_uart_t* p_uart);
#ifdef __cplusplus
}
#endif
#endif
